/**
* @Title: Demo10.java
* @Package me.shibor.study.javaSE.io
* @Description: TODO
* @author shibor
* @date 2017年2月8日 上午12:01:33
* @version V1.0
*/
package me.shibor.study.javaSE.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**
 * @ClassName: Demo10
 * @Description: T输入若干文件名，将所有文件压缩为“test.zip”，再从压缩文件中解压并显示。
 * @author shibor
 * @date 2017年2月8日 上午12:01:33
 * 
 */
public class Demo10 {
	public static void main(String args[]) throws IOException {
		
		
		String FilePath;
		InputStreamReader in = new InputStreamReader(System.in);
		BufferedReader a = new BufferedReader(in);
		System.out.println("请输入一个绝对路径：");
		FilePath = a.readLine(); // 将 FilePath 作为输入值
		File FileName = new File(FilePath); // 获得此路径的文件名称
		
		
		
		if (FileName.isDirectory()) { // 判断此文件是否为目录
			System.out.println((FileName.getName()) + "为一个目录");
			System.out.println("================");
			File FileList[] = FileName.listFiles(); // 将目录下所有文件存入数组
			
			FileOutputStream zipOut = new FileOutputStream(System.getProperty("user.home") + "/test.zip");
			// 处理压缩文件
			ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(zipOut));
			
			for (int i = 0; i < FileList.length; i++) {
				if (FileList[i].isHidden() == false) { // 判断是否为隐藏文件
					System.out.println(FileList[i].getName()); // 输出非隐藏文件
				}
				
				//压缩文件
				System.out.println("Writing file" + FileList[i]);
				BufferedInputStream filIn = new BufferedInputStream(new FileInputStream(FileList[i]));
				out.putNextEntry(new ZipEntry(FileList[i].getName())); // 设置 ZipEntry 对象
				int temp;
				while ((temp = filIn.read()) != -1) {
					out.write(temp); // 从源文件读出，往压缩文件中写入
				}
				filIn.close();
			}
			
			out.close();
			
			
			// 解压缩文件并显示
			System.out.println("Reading file");
			FileInputStream d = new FileInputStream(System.getProperty("user.home") + "/test.zip");
			ZipInputStream inout = new ZipInputStream(new BufferedInputStream(d));
			ZipEntry z;

			while ((z = inout.getNextEntry()) != null) { // 获得入口
				System.out.println("Reading file" + z.getName()); // 显示文件初始名
				int x;
				while ((x = inout.read()) != -1)
					System.out.write(x);
				System.out.println();
			}
			inout.close();
			
		} else {
			System.out.println((FileName.getName()) + "为一个文件");
			System.out.println("================");
			// 获得文件绝对路径
			System.out.println("绝对路径为：" + FileName.getAbsolutePath());
			// 判断此文件是否可读取
			System.out.println(FileName.canRead() ? "可读取" : "不可读取");
			// 判断此文件是否可修改
			System.out.println(FileName.canWrite() ? "可修改" : "不可修改");
			// 判断此文件是否为隐藏
			System.out.println(FileName.isHidden() ? "为隐藏文件" : "非隐藏文件");
		}
		
		
	}
}
